package com.swanclouds.redfish.systems.domain;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.swanclouds.model.systems.LogResource;
import com.swanclouds.redfish.common.redfish.MemberModel;

import java.util.Map;

/**
 * @author 张立强
 * @version jdk1.8.0
 */
public class LogResourceModel implements LogResource {
    /**
     * 系统资源的访问路径
     */
    @JsonProperty("@odata.id")
    private String dataId;

    /**
     * 系统资源模型的OData描述信息
     */
    @JsonProperty("@odata.context")
    private String context;

    /**
     * 系统资源的类型
     */
    @JsonProperty("@odata.type")
    private String type;

    /**
     * 系统资源的ID
     */
    @JsonProperty("Id")
    private String id;

    /**
     * 系统资源的名称
     */
    @JsonProperty("Name")
    private String name;

    @JsonProperty("MaxNumberOfRecords")
    private Integer maxNumberOfRecords;

    @JsonProperty("OverWritePolicy")
    private String overWritePolicy;

    @JsonProperty("DateTime")
    private String dateTime;

    @JsonProperty("DateTimeLocalOffset")
    private String dateTimeLocalOffset;

    @JsonProperty("ServiceEnabled")
    private Boolean serviceEnabled;
    @JsonProperty("Oem")
    private Map<String,Object> oem;

    /**
     * Redfish 允许的系统资源可执行的操作
     */
    @JsonProperty("Actions")
    private Map<String,Object> actions;

    @JsonProperty("Entries")
    private MemberModel entries;

    /**
     * 系统资源的访问路径
     *
     * @return dataId
     */
    @Override
    public String getDataId() {
        return this.dataId;
    }

    /**
     * 系统资源模型的OData描述信息
     *
     * @return context
     */
    @Override
    public String getContext() {
        return this.context;
    }

    /**
     * 系统资源的类型
     *
     * @return type
     */
    @Override
    public String getType() {
        return this.type;
    }

    /**
     * 系统资源的ID
     *
     * @return Id
     */
    @Override
    public String getId() {
        return this.id;
    }

    /**
     * 系统资源的名称
     *
     * @return Name
     */
    @Override
    public String getName() {
        return this.name;
    }
    /**
     * @return 日志服务资源的最大可记录日志条数
     */
    @Override
    public Integer getMaxNumberOfRecords() {
        return this.maxNumberOfRecords;
    }

    /**
     * @return 日志服务资源的覆盖策略 [Unknown,WrapsWhenFull,NeverOverWrites]
     */
    @Override
    public String getOverWritePolicy() {
        return this.overWritePolicy;
    }

    /**
     * @return 日志服务资源的系统时间
     */
    @Override
    public String getDateTime() {
        return this.dateTime;
    }

    /**
     * @return 日志服务资源的时区
     */
    @Override
    public String getDateTimeLocalOffset() {
        return this.dateTimeLocalOffset;
    }

    /**
     * @return 日志服务资源的启用状态
     */
    @Override
    public Boolean getServiceEnabled() {
        return this.serviceEnabled;
    }

    /**
     * @return 自定义属性
     */
    @Override
    public Map<String, Object> getOem() {
        return this.oem;
    }

    /**
     * @return Rfiä¯允许的指定服务资源可执行操作
     */
    @Override
    public Map<String, Object> getActions() {
        return this.actions;
    }

    /**
     * @return 日志集合资源的访问路径
     */
    @Override
    public String getEntries() {
        return this.entries != null ? this.entries.getDataId() : null;
    }

    @Override
    public String toString() {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.writeValueAsString(this);
        } catch (JsonProcessingException e) {
        }
        return "LogResourceModel {" +
                "dataId='" + dataId + '\'' +
                ", context='" + context + '\'' +
                ", type='" + type + '\'' +
                ", id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", maxNumberOfRecords=" + maxNumberOfRecords +
                ", overWritePolicy='" + overWritePolicy + '\'' +
                ", dateTime='" + dateTime + '\'' +
                ", dateTimeLocalOffset='" + dateTimeLocalOffset + '\'' +
                ", serviceEnabled=" + serviceEnabled +
                ", oem=" + oem +
                ", actions=" + actions +
                ", entries=" + entries +
                '}';
    }
}
